package Proyecto;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;

import Componente.Imprimir;

//  Clase que nos permite manejar arreglos creados aleatoriamente
public class CArreglo
{
   // Metodo Uno: llenarArrayAleatorio==Nos permite crear un arreglo con elemtos
   // aleatorios, ingresando el valor inicial y el valor limite de los elementos
   // asi como el tamano que tendra nuestro array
   /**
    * @param desde
    *           : recibe desde que cantidad especifica empieza nuestro arreglo
    *           aleatorio
    * @param hasta
    *           : osea el valor limite de nuestro arreglo
    * @param tam
    *           : el tamano (numero de valores de nuestro arreglo)
    * @author HugoAlberto
    */
   public int[] llenarArray(int desde,int hasta,int tam)
   {
      int[] numeros=new int[tam];
      Random rnd=new Random();
      for(int i=0; i<numeros.length; i++)
         numeros[i]=rnd.nextInt(hasta-desde+1)+desde;
      return numeros;
   }
   
   // Metodo Dos: contenido==Devuelve el contenido (elementos de nuestro array)
   /**
    * @param desde
    *           :el valor minimo que tendran los valores aleatorios de nuestro
    *           array
    * @param hasta
    *           : el valor maximo de los valores de los elementos del array
    * @param tam
    *           : numero de elementos que contendra nuestro arreglo aleatorio
    * @author HugoAlberto
    */
   public int[] contenido(int desde,int hasta,int tam)
   {
      int[] numeros=new int[tam];
      Random rnd=new Random();
      int n;
      for(int i=0; i<numeros.length; i++)
      {
         do
            n=rnd.nextInt(hasta-desde+1)+desde;
         while(existe(numeros,i,n));
         numeros[i]=n;
      }
      return numeros;
   }
   
   // Metodo Tres: existe==Devuelve true o false si el arreglo contiene o no un
   // elemento
   /**
    * @param arreglo
    *           :el arreglo a analizar
    * @param indice
    *           :la posicion del elemento
    * @param valor
    *           :el valor a buscar
    * @author HugoAlberto
    */
   public boolean existe(int[] arreglo,int indice,int valor)
   {
      for(int i=0; i<indice; i++)
         if(arreglo[i]==valor)
            return true;
      return false;
   }
   
   // Metodo Cuatro llenarList, mete los elementos de un arreglo a un array
   // list.
   /**
    * @param arreglo
    *           :el arreglo a analizar
    * @param indice
    *           :la posicion del elemento
    * @param valor
    *           :el valor a buscar
    * @author HugoAlberto
    */
   public int[] llenarList(int desde,int hasta,int tam)
   {
      ArrayList<Integer> array=new ArrayList<Integer>();
      for(int i=desde; i<=hasta; i++)
         array.add(i);
      Collections.shuffle(array);
      int[] numeros=new int[tam];
      for(int i=0; i<numeros.length; i++)
         numeros[i]=array.get(i);
      return numeros;
   }
   
   // Metodo Cinco: imprimir==Imprime  lo selementos de nuestro array
   /**
    * @param arreglo:el arreglo a imprimir
    * @author HugoAlberto
    * @author reynald0
    * @author alejandro-lpz
    */
   public void imprimir(int[] arreglo)
   {
      String aux="";
      for(int x=0; x<arreglo.length; x++)
         aux+="Indice: " + x + " " + "Elemento: "+ Integer.toString(arreglo[x])+"\n";
      new Imprimir(aux,"",300,500);
      aux="";
   }
}
